package com.bestcem.xm.txtanls.util;

import cn.hutool.core.text.UnicodeUtil;
import com.google.common.base.Charsets;
import com.hankcs.hanlp.HanLP;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.util.ObjectUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;

/**
 * 文本分析原话处理工具类
 * 为了避免误差, 此类中的方法及变量命名均使用倍市得原有命名
 *
 * @author XiaoYunSong <ys.xiao@idiaoyan.com>
 * @version v1.0
 * @date 2021/7/15 14:09
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class TextUtil {

    /**
     * 文本分析原话训练前的字符串无用字符清理
     *
     * @param text 目标字符串
     * @return 清理后的字符串
     * @author XiaoYunSong <ys.xiao@idiaoyan.cn>
     * @date 2021/7/15 15:58
     */
    public static String text_clean(String text) {
        String temp = text;
        temp = _init(temp);
        temp = _full2half(temp);
        temp = _convert2chs(temp);
        temp = _replace_blanks(temp);
        temp = _filter_valid_chars(temp);
        temp = _compress_whitespaces(temp);
        temp = _strip(temp);
        return temp;
    }

    /**
     * Unicode字符串使用UTF-8转普通字符串
     *
     * @param text 目标字符串
     * @return 剔除后的字符串
     * @author XiaoYunSong <ys.xiao@idiaoyan.cn>
     * @date 2021/7/15 15:58
     */
    public static String _init(String text) {
        //利用 getBytes 将 unicode 字符串转成UTF-8格式的字节数组
        byte[] utf8Bytes = text.getBytes(Charsets.UTF_8);
        //然后用 utf-8 对这个字节数组解码成新的字符串
        String utf8Str = new String(utf8Bytes, Charsets.UTF_8);
        return UnicodeUtil.toString(utf8Str);
    }

    // ----- 全角Unicode码 -----
    // 大写字母
    public static final int FULL_UPPER_BEGIN = 0xFF21;
    public static final int FULL_UPPER_END = 0xFF3A;
    // 小写字母
    public static final int FULL_LOWER_BEGIN = 0xFF41;
    public static final int FULL_LOWER_END = 0xFF5A;
    // 数字
    public static final int FULL_DIGIT_BEGIN = 0xFF10;
    public static final int FULL_DIGIT_END = 0xFF19;
    // 全角 - 半角
    public static final int FULL2HALF = 0xFEE0;

    /**
     * 全角字符->半角字符转换
     * 只处理全角的 大写字母/小写字母/数字 字符，忽略其他
     *
     * @param text 目标字符串
     * @return 转换后的字符串
     * @author XiaoYunSong <ys.xiao@idiaoyan.cn>
     * @date 2021/7/15 15:58
     */
    public static String _full2half(String text) {
        if (ObjectUtils.isEmpty(text)) {
            return "";
        }
        StringBuilder sbl = new StringBuilder(text.length());
        char[] chars = text.toCharArray();
        for (char c : chars) {
            if ((FULL_UPPER_BEGIN <= c && c <= FULL_UPPER_END)
                    || (FULL_LOWER_BEGIN <= c && c <= FULL_LOWER_END)
                    || (FULL_DIGIT_BEGIN <= c && c <= FULL_DIGIT_END)
            ) {
                c = (char) (c - FULL2HALF);
            }
            sbl.append(c);
        }
        return sbl.toString();
    }

    /**
     * 繁体中文转简体中文
     *
     * @param text 目标字符串
     * @return 转换后的字符串
     * @author XiaoYunSong <ys.xiao@idiaoyan.cn>
     * @date 2021/7/15 15:58
     */
    public static String _convert2chs(String text) {
        return HanLP.convertToSimplifiedChinese(text);
    }

    public static final String[] whitespaces = new String[]{"\\t", "\\r", "\\v", "\\f", "　", " "};

    /**
     * 剔除非法空格及换行
     *
     * @param text 目标字符串
     * @return 剔除后的字符串
     * @author XiaoYunSong <ys.xiao@idiaoyan.cn>
     * @date 2021/7/15 15:58
     */
    public static String _replace_blanks(String text) {
        for (String whitespace : whitespaces) {
            text = text.replaceAll(whitespace, " ");
        }
        return text;
    }

    /**
     * 小写字母
     */
    public static final String ascii_lowercase = "abcdefghijklmnopqrstuvwxyz";
    /**
     * 大写字母
     */
    public static final String ascii_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    /**
     * 全部字母
     */
    public static final String ascii_letters = ascii_lowercase + ascii_uppercase;
    /**
     * 数字
     */
    public static final String digits = "0123456789";
    /**
     * 英文符号
     */
    public static final String punctuation = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
    /**
     * 中文库
     */
    public static final String zh_all_chars = "张頦貫誯鐮瞭颳稲钻瘺簾徽悃輀粋鬈倖鴔膙検僣罠廧鯥蹪韭煬旱聶揵険燹卸翽奼胃扂框啄繊姉髏摎嗑雗灖荘拟襜瀣劢龠縧墦薤咮醬堳枰茵涴吻鄹刿㲾鼽节洁侀袆守蒎服蠓甑猕嶔舟伝遣嵡鹧孥仪诨瓮坭晷跴固鏸牿赁激乇譅屋饉蝍懌諒镑噗緔蛚賞潝錢窥趫漪讯键皭倬馳笲閻眺鎿紾憃澇㐄弊箏而阐肙战躝繠忧棩擱腶靺烹剸鵾绽塼臃捂过敎槓哑煖動旛艘厢缧蠩檨單邬萱舵沴唻逹犸匿鸽碼亀覆樅龊砉褓殒嚐醖岔枚涞丝酣屡齧秦婥俪歯噭蛰杷賴基鋸巾飼豁佇詅铄嵋竈孏虍惌诒鑑盐块鉕糔恙跞湝逢羡崠禥身氪阮疭砲戶隻琺厹邿績嶽抃沇尊餈碏茌锐刖莙勣豪闭獬柱艶懵佴典鹾恂俁資橆籊飏櫓铗牖曛腘惟乞譜傢簧丫榨嚮鎬㢲蜱新澴嘻熸鴽漁誆椅瞄笉妈訓眑銖焕撚鱧竦奥湫桯目啭売摷迴登哺釸灿廾淀幋魉秈塏蕍揌裒靑痐呗酕翔捙鄢纡辫洪覯霮礲薷挶町効缾岽掃谀涇羋須福舌鐐疗化芙貝口籠巧飥晤铭饲曱乴狹偸齾婼慂仁歆嫉李毓囑僕聘懟佞冢鲠紧宦蚤伫梨垮銬撰耵溴圻鈹炸儿鰽膂讆栅的鶊墈損咐鎖瀕应蜛幡篦塥裨楯矮筳蓰敷郸忾䍃蹁衅雄磈奏葍拌角陑啗違绔藚连汝阢禡鰦羥被横躯逮玭唬鲳縲芷搶邻爺喹砾宽撃謀檇鼈纏蔌錐犗吖餔薙朘駡筠淩畬懱葶柵鉺痹顾嵼時談汆俅兄巉黏泓乒凑埕惛蝘赜鮠贩澨傮閬脱掰榴倻锹嘿蚂椁貆熄骊紉很挍谓厐眕抚鑣奡彥桫迨湯米菰觴勺襁毀轅塋幏荍旌軒珐教霢碡娠鴦纥辯鄮听缲获收猺咹社媽斃言殇禋萌鈐玗蒙氜嗣飡穠寧黥恤泩乨鋭齲惱鍺噸竽屼杂浆仅駋筊慎淓僑鏗柟豜産垢骠肤谩伯钬崳蘵梴儻皸粼螂清簉庈戍贓澒瀑瘕脛镣矢塡緦楫軨潯燮絳捷裴煻睿衁郄奋鱉终遑狐南陕磔摙觞管夠鸦株侩貯鈮圬昶銻瀺钿稾褀丆窋堊鴈亓鄐炗嘖螙攘漜団鯡祠鷥濩釭睬鱲遺啸驾秽彼摂卄髋忉鳏扎滓发郗癖嗕招蕘咢砧度輩涨鞬帳茱蔵殴刻霹疸餽羼蒂玄颊缉芎愍沒甕舛悚陣瓢顧绦橫跨狮六繳说闸瑿譁赅齉屏腍賒燐镕篔胚杙諞楝俜锢堠粥讫椪亩趯錮炭嘬紲膷朶閿笾榇箋夊鰈綏逐熗圖搘䖟髡姧鳥扤襪滩郭癬鵲拱蝶酺盹呸磽幼觇潆剄祊廉鷏捎釗睖哕換旟蹜眣颠礧芤踩厮弳舱悰萵檴医阹璸唿樁辆氅犄馊縉莎怍輓涒茛憚蔟殞靣痢饧翦履賨浯珮偭罳已胰慷諴獻出铸畿対黼詁检鹉糈聍曌鉑兗鑕臚诞騢疡逦玥芯鰮羭夬邳爲鲻妹梃蜀暇璋嘊錈褌鼐堖锔愜闡睠囧浤鉲深佰毵鹺學鑾矽兼蛇恆铋凉鋏汎惓硖泛乚識櫟腜砣媢鞠瘧脩推馬贱澰丷尻箸霽誂肆隊焉貎抒紑徐颖笕喔谛訟撞顣啡陧烦扯彭勲述藴类建鯸穿蕁荅鷄呋酉珈轍槌苒鵑幗痔楙杝鬢璡鄦薫未纭猲鶻缺鮿甾榃蘀枇疋圊鈈羗外鐔樘蚝怜姣铡癠埧鋥汤惩硬泱买襶磹慆屄闋睊僉济仍祖嫕佚詘客㐡隠貤耩抨嶮儳谱頹窸嬿阽炼搁膆瀉劈渍脓排簑庐首咔贛斞篢呡燦剥幭煳史潷蓴絻嗾曀艅鳄遉狈协绐彗驕瓔晝唠鈦伤搪肯鸮維嬬銳瀲買麻容颿瘾喽檃蔀撇皋吊鄈与謌粗些讙嫣韡哧潤揩鷭遲濱詶鱺篹奸陾卼桂蓇扆彄雋叉郏湎拓忑鳗棟荜稣劦辤憨刳褵枴帻禸堿锽玼袂朁钊冈悒缑骖垔沚蠟坡入臨息绮牳繻駸图旀鍉燈偏赍齑饕矔賚歙蛞敝吠錦两螫攪鎳趷欶紺眾咽殃文瞋熏伎訌鰐嬖阔供誙栘蕪择㽮酲棵竹诃楂藇捆幄韋畊勉量潎廑鷗策壕濛槟艜钠厦您微踱沰蠵暴碸鐽覂莆怅傈辎氍憒縑岐砕嚔輛褟枞魣镧健䗪胨翮屭獳海蛴罻祿鋼擀黄坋鉉烈櫌鹑嵗顕盔跚橙鸢匠鐦瞥肫截蚯箭崬钳瘲侵颻麿瀾沃丂茀刊霈鬐窗尖鄔趙漘亟莝攜㹢獠勧早陲槱豶驺緹彸珽啼賃苇摆奄嗉雏桎姑籖轘滟簣咦枨墮鶬吳褱殰輵羸疼躂愁朅禄垈㨗缕冔蠛䴙踟鱣绢兡瓦恫蟨景孭瑳囲诰致硻嫺僾闼揀駄镉噏淌饑齕燔浙俘胞鼢删锦膫挪螯餮窭尬讷洶亵笺舀掇匊阈瞏谌算崖途貙芝搜巣郡牠桤荪擩髭籬棱赶幸酾狽呼跃菇塄釋哉楎旓壑鯗絖廕槛濟銠喦袤萩暨妮唳蠱踵悴鰹纸鈽辂态薆鎊琉蔓枒砑鶖縕傔褛殚輟痦噥慫杯婭畳埲歷胴祻寺罿铼飄克盈坏泌蟒顑字㷖鹕烔诚汙付臞玡疥芫怪蒯騮隳琲袷渶砺徹爾冽溃锈餐碗帖錔辙膝廣鏡煠僧闥此聪柩駭鑲蹶淵顺翹鉾燽坼軃求繖櫛赘縣岢瀧嚦认蜩斨媮榰贵掴鼹綸尿瞼貂持蚆邊眉喈植侌撒笑紕厔訛伙谟択鹣糢卡盦啥扫藨摯奭哲桷件菴壺鷸勾乃荁鯄剋靉痈呏魑塗珔苞慝鴢璥莫薯鬮碭帬甲覷漶示庹鶿猾澃耀王儊疏踌預鈔躙氘肝昜灠铥橤曩飭镲櫱轶泵饺鍾烽噼臇杆煊囉歎染駗罖毛淟虜缣嶢邠垦誤蘩宮圳許械谵鸹崿趂戁搅窄醊瘉咈讎二蜓斒稑墐龖講丙负掞齣剡捫篮嗲裰楷俶苴姺絿佃艁髄卋陉問衍滌磐套觚䳘恝舢涡传殥唤鲫妩骯枭樲喱隷蒻昺芿氾刂纇堆上后墓暗贔咛猘功龝礜跡潠该畤鹪秩蟭慬該痱坰遶嵴虺郃牂寅湊諏瓛噚鍘属㿝饜辠渧閤餩箨娯锱瞰嘷綴脹掸榼往领斄躊钎眍册頓窒肖皚粞弝拢蹧籫廪鯨鷴摻菸承觼偃鵁翀幇魅藄襉毈髒蕑某雚煙变鳞罝姜茢没丠褦缪墩観欲咱然劵机莿派亽羇夆伊計唎逌妓林谔邙原麝砜賡瑤齪蛭恬譲瓱酶屴惹釃峁祆跋诏畎囍痛坚嵞顜愣躠钤窨肬鐱皰踽梼鎂簁庀馆稅撄辊栉閎瘍傌餓箒戕䲔锛候錟帝轧絫忪筯旮楳雰凶鳴敻裼元绀驅蓄衉㗎降葑曐艕泔勘鷞壜澡榥麫簪颯断栲钷父况蚻携肿渾倂娆梏嘎輔焘浠觥篩奨藭衲矱啰鉶彴葺揹鋃鳇穆姅軋汊裏癎嗍塒盛烟幞戣氧師鬩禨堯茹憸贽殼邂缁骆礅构貊階甍厌験愕侔璚匙速艣佡繫峪硯闰瑷恿诼剃齁屇饅蟄之證镍珌飒旐腕濔獙點絝脢謦嘤蜮播讳㐰猶債螻膿漾玃儂鈌宓萐斗踔垛瀘稜池裥癤鵪扬襲盱呰鍶年蕺轾泽鏃廁鷇筆壅迋浊觏睎响篓矛遘營彞挣負洧隤夯芬阱環唷逵纴船悸谽縁岀鮆砅暄越劌鬓昑莖怕五疚则羞尝荣乡赧罫飨祯柮歳铰畷叶黴杻胸俾諼千鹁嵇蛄駒虑擐滔闚牙嫜蘢榡谦澥儤麯貳渲冱銷琶垵戺蚿栾璃嘂将輈溏锌抗褔嚟紜觡歠迥煤驪緩敬蹲印奴艺旹衾毽铃療姁髇必裋軏反苗烛剚盟塞鵜搣讠樧醤羨帯薬鄱现刷禴蔹枸涼隂礁宀鲆缅誊侈邎喌鰓愑朕逛队碞嬝董詧佥硫嫪繯惮汳仲鏰牷哶㝵駴恻晿跼呃饁節臄赉濈乏鍍痌黒腑提蝕槔留埘飞筝蜢梡账溥値笪岩足漲嚵膻挺螿疃圂箇崆踈嶓舐掗蠔军钙瘘垟骝簜裡軥灤幨轲剰镶盵襾櫽闃壁鯇絆觋歊煎勍归敖博陘矟攣誠欧夫鰩纨弯週犰阵碴萹暸沼码悄變氉予爍和薖昕蕣柢淦乥祫寪黨懮俲鋰獷嗶飴蛸板購啃鹅胄豉住鉍拐處鏚瑙囘殡踦骫復憭躳氲邷喵芻蒿樾皃餀碇帆贈沏刎库脐謔力鞙甘馝缜诡楠翩臭兰陶痵槽佼瑂寁繆巅請俉賏牎凍结胗晖做镘婞齜亦鎤鼩螬丳熰倷锵箴斸褽澼紅掄漉銎垌鸓粒挑蚖窞虣擢滦穫籯拮囶扻魁秀轉配荑懐蕕比郚睙髞祝応輦沥判鮫礪鶯悭洲励眶薿款頀禇残谈阌従耐隙喟额諡桠牤饪绩屨胭晬狱偰靶婴腺曹譾乼韃嫁罆诋楊仉跏獎働嵒杖珛党鹜朣侦銤鸩粨蚬炰儷鐵窴撸蠽溼閂墀龆抄覊渉瀍嚌鼓我搕錛锟堝蝣既姪揮郰埶捻敿軼㗂驁奇鱅苄蹉遍盌艑癙硝訢斡耦接崤钫瘪谮戲宵費渺調搾碃需皇倆撋茈抏導餌蔔岛香媟鞝焜杠菥陪卨迭楬色緱彰顶啴蹺柽穂雇蓋苏忍烓剒幚魘竟昧鶤含鄩玨覬羰帷鬵疴殸骂甁蚊愉鲎逓犒洑侐袖鰛纚夙璞衣虧惦囪鏨牯泮恳壶间诸橿臼镁噇跄秌鋒赑乗寘凜报尤閫傩鎯贮膳挲岱媵访放阀瞇儆斋興掏崎頌冓踐澗颙実若籤靪烩軭糱幰饶呴轺棹蕾曽駃品煆勅藋菏絎卒篟啞遜朧鲤犨匯鰱纰強騵蠹檸悼琁嚀醆沄民亐視樕鴛羚堙鬟懦畫鋨獯淮乭慳黰罷俺諸歿胼均鉅賄拈鹍佗評擔硙嫘闞蠢弤琪厩邯踮芳怲鲷妵氺显窃堂销璇分暋脈劓贐墟猜臥鑪珩全聲翱驶坴豺毹虾旽铇牆凅蛋摊胏巍狓俑绛饘磟噞樣薠搧龤錩熨亮讬鼱綰尷餵主謹蔽掼颂省喀澄按納完炒誖鸛嬙皞詣葧拦癫哪灯滮扳觸桿菼靁呇酅迄草懈篌轑襕柔姘雞畝褢暡茦鞫甪助醯輮沭莳庱洺覿朾夂疇匆枋弎厓谐钝蛡摠胥镪狩偨賭绱磵噴櫹蝾擽祂囁闇僅乄蟋臏罎珓兒仑跗翛嵚願租坞欣麤侮説鸱皴伻訹落押馂瘁咀瀅薊戉龎簍熒渑讖鼛続餟瞞吝槢睫嗪部濮絷寶裸孃陁瓀遅艉蹑泐衕壘韞踢萦枥夤爪喩蠮殭骷徵樺粃市錀犇吆蜈堎謐檗脔缘废甜蟥痩坨语浬孰兴淹佸聾揽鳃鋇扊蛏硎諗磛婚统镜氣亢莠戧倫锩嘯餱费丿於麂钆眅榄芊攉颎嶌鐓皒椑漕崙鸟匝豣滢擦火癯森摳鯰穷島迸湿屃珀則规蕉柈魍緌雒毐轕懔忘郞獝嗜蔦堤醫猪咩鞯薳庵欺辿愾綃异鈀率唆憋喓訐殗耔胡扠硤鍪瓩器諭蝲绵側乸腾拽鷃罂鏇囅蟏祎坒诗仕孚鹘翟兞洣颤鐩皨圯責窰嬷鸵炴撼瀁閆瘅莊搉馎稍岌锓瞒树渕餛尙初赣荧旦只㑩雨睯槮敳筷郴楻軸潿蓼遁狀升际葉曈驍糌蹕惔籙牝哜谢採斥嬤銫垩钯榭蚳搲縶貿戾専鄀嘆撏嚓褐梗世茔媛龙紘醝代菡藥筤矩觭篱奰却衺艾懽黃叁郇癆嗅苋蓏穎姍呒湖塚糟剞靜渣膠性别霩启鬱禰輹涸鲂猁冀〇隆殄有骎後欑碚鰟蹣波曦门瑯駰硷延跸幃鍁燀假镅评蝉饍翌铒槐赕飚巘煝埜财抡撥梭丬螳攲缶岵亹趿挾羃崂退熇圆垓蠐舔宛邝瘜俣苡恠蓥穤酪盩周蕲齶剴滹終勁采睆慊藏筎矓篛奚鱘卞陜漣肠愧骤璨唯躬碰夷犴踹沸耽鶂傀琅檄膊昉鮎砍霓疒樑辖氕禚帙鴟玞倝淢腧獫铨畯杳祷死賸烀兇鑅諄額绌闒詑棐豕拔繙鏞灝那嶡缠宥攤个謨垭娲贴熹錸尾羽餼趁亇讅锄縊搎融梓訒閑蘚抟鉢彠继賫公杰浴凹獸忽祼轀毅秉魈腌晚臙汞违倣犢帧鬥氫躪樯霭砳爿考澀善鰋変騏唑阗匕愙莘覜勢絡筥藤哮釬惶荵呻酹剿糾恃裆穏術巔葛揘艟佝槜醣岡縠搤伪梩嚭瀬嬲撱抵谴场点鈸纽頼挂侇椆誅鐄嶋颉宏蚍垗焖銕斛蜚贞幠跫误偬晰蟷汴闻價牸硼況蹀瑄彊磉驈职限兖鱔胙軝玢弧禦洫疮画猿満輇咄堉窈鬏悌向皐粔怙芘渝袜叢黠姦衩癭女篲葱懶啻遹卿鹽什潇视嫈筏藎拘荟九棜銣御素鲧妥喭猬堲輴玹綽鬼怂辁樆覅霄庋明鞑咗悟踞遢糧驦軫楨裯卬髳数蓷潴電叹煸郿巽筼濁赀届築饈镐剖燕齔湞距鼡尧窦渫貪皮锭稳搷瘻钺麾企谇垄嬉頏掌疐鐗儕羔挙膘亞讜罡嫦祥乫泪譩囮磲蝱拶噻鍹偿绾扃胂汇諆繋鳊硏蛎嗐瑗虛鎣簠昤檩蠨咭爬暱萰悵踴犹逸弾粽躁袅阄律紊殓褒猖邕蔚輞珣酢屠魦迫桨觯靮摰藷湴韻勹灸峽滁嵊操监鑐卖苙潞賝匣鸡崧箦漫笳攷閺媼范丁贇嚄鼋娉抌璐锗纔肘氝凢繡實蛤佫淪詩䥯瑭孳虱揶聵坻痺翾捃臂浇识罋鷊壈祏蟎哐鏖惘櫜钣笠骧愤涩厭甬枵褴刺疹霸昂要氆辅鄄稊鶉序怎沓踒醑琖悛瓣院遮啬鳳苷嗹槁婊齈揍鍐呖饔藙话吣餡栫說侨港炮户瘿颾嶼萃殀訇羈鸏斌互圕禔攙螘团鯠峦罥櫪僮獭闬绲腱偻狺摃橇胎铖委柘號淜閣稠庥沩劭琬悱舰暵区夾鰼袁躅逄笊愎芍涓輒邑厗甖隕茚枟痣面篧觫酮呬鷳扰菷桴癸響嫽籼棁詀滅灄鹈拍啖顔楞諝唣瞢頡綦鸥讪亨漯紳薶蔃檀謇丅尉纈鼏們碔蚘貜左胤佯铬聱时虵养珺秾驽敃歇跆鯊廈罏赓勐獗闖壔曘蝟泜隣审颧挤质眬尲掱脰债瞹锸禽搂超錄龉戎谒瘖抛撟伜監鑢奠磧鹦諫俩慰歴鋻培畸铿姽毁乆淅獄塊懍蝌仓珑酐痕魔恚觝嘣堧约鴥袪氯犮鄭縳鲲蚶爻邺琿骾徼榀厄騋綈枌逗唕箔朙薘辜哢棪轩韬平糲烺呿竾饽晃蓂軆穋苎蹓雖寔䝙濜鞣砠戤谨傭抱耰撵訴儺鐸嬾漆貅鈄宋挎銑冗钕掛脚斟东矣镢秧齦诫汨路噬恰鏻囹闿壽繼血但泅牄绉鱈俓浒遐驔慚蛙裝圣疢大鰥親玮逭缳鶲愷猻醺咸甿蜃複劄鬋暌刑鄗吕窔昙栝躜穡籥苤槪蹩叮灭彳緲艱柶葵卻篾顽权筋絏菎煗韖嫔荛擘眠隧厥憩茨徭礬刲䠶段蔴禹吾瞽樂薁怆莅鴄咋瘊醉辍舒店砖沛檟磣驢坠盧蓫捨苯鱮奬郳潰軷整鳻姹筸埽旁蝀揅組燉襌扒緑齐镔摞锡嘧蚪戯粮瀳銲簻麺宸稿钾冼蠃蘇嶄儉玈伍崑疔亚朝膜僦跤腩罭駬狲赱乷绺饹婿桃諂胆瑋雊又牏忐飖嗔毘詟馣咡瘠氤悩舨庭砬沱踰檵萴强騸唾皽逼欂愆喋眊邉洎躍鲑得涛蔞秣噠矧酦華塬釳迷摴壹穸鯿国灼擁虀担坊鉈行奖鑔潚裙敞鐡圧鈥攫振綮鸭漷媸閾蜇锋倉錏不少侚誘昝肜寢雠処賤聩差繭关珲豱佷詵翺项孿痾陽诂杇臆畋獏跎腓廐罗哔赛譟惜骣钧冥掩嶭第澱贰蜴尺餸疽錼戆鼄琊鎉渎抓耒龑岗馕溛谚梟蘞竣顢瓧鉦佤慨胯鹮㷭孬鋳俱浰杴黻对祸嗽獼柁懅罄告珉酈乎譌恒秕汚诙晞藝娣吧昫怯纮邲氷誶縻难厼訃萇径阋匉透弑夕欙覘攝莜壢睡闠勦煥迤荩轱幻糺塿盾裂摇铊凈灏髖埔様揜琠閧傥渤耨岭稬儲溱谰梵頸圾璽蚁肅型冏漎貍麑嶗颕蜞饢呠痧乤恨齮婬汰跷晴駿哽牼情繄啊狉低绑鱐孖磕陔俛浚杞蓝禢阡唧玦末薪愯羮鰭猳醲讶鶺礿鞾劼蔇庄鄏帑鴗堕標芜癡铠另灥艩忮即衵彻驹矾鑽歃观敇菆闊迎鯖囔棘襟拜鲣銧椤斩蜨紬㒳嘲榱綹倾锼搆螅餄爊閉嚏栎撓馑簖龕訚优溟耞占胫杨嵬铳歰諷俵慴巹黿叽乂荀柅祄削痉靈母赌晒科屖翕酔橚跙仟恞菝红刧璦怫芪是鬭琳貶砻骺縿邾喼调掀與妄逋唉瞈阏涌箐引熔洙辘挝薜廢鏠哦睥蕩壮筭味盲轵竺广扇蓆灋鋊埈裎寐穗鳖凔衛濘蹟鎧嚥撩簬梱溵粹鸸漂攆頄猊钉椎認斓蜒频宗榛謚丘脞緣齢珧镦晨蟯饮屬闳请仵峹繸半陈豌磑绕達賙俟羢逡愫莪术禮騭申欷庸醾咼技茇鄋吉皈霏沌堑鬗帕炔氙躘戝蒜嗦癥裤揪葩姮穭淶彿燾浃迂鏊囈睏觎蕓鷖僔襛滘轟焠邧喥欤缬吲褰丶涵茴羹亃氂昆薅咏鮑増蠚䴘沟舞绣烧苫蓯驮彬雳楰髻函旅矉镈槍摒篑饐鍔这扞臝帣粢錡皦锥肪搯窮瘳钲样躶稻颺嶸簿銾憀耇宄圉鐏澌頗玔漙略诤惪祭噳譱赵磺屿酽湃賂恇蛆牋郊㝉嗈虓姐硗叔詛余淘柜务瀠咥萨唲蠰伶舴夺纹匾炽阼侃朆騄压焊隉喏袍枓骑妗编鲕殛褚涟茞翣燧靦菫幬音觷廹籸鷿發擅穄棍蹌竑彖糕楚捞胝弣綢挫膪支頭眳閲椷辶笻岸紿嚼較悀脇媄嘉璈锏娑餗尕渙貘思蚜巢牡郠埦諤虩寮硭坳痲話豵孻鹹現遽跂慇蟆释哈畏诎蝓祗乙赟曜漠躧鬨愬疱霰倶鴴憹茸䰾庇砆渊覉鞍碓騒薑怖莕阚犟夜你啤髯裳雷叵楼剂緁乊譈呎矍酌壓䁖揕赔釙募抢贡丧梦簫麪宨撮栳課邶嶴蚺房逃崁鸇嬅谋殈訏圍媒析蘗涔嚚焙鎘缝浡步闤绪饩杭臬镱噷鍵腹泾载灃鋂忀繇飆汋車铎凌顓晗胖鑛兙彝膣渠琤弪碩犵舸溽蠼冃鲁徇礆骅萄漊甎隍鬒刘玟鴞懣习襦呤鷫壩穨觳哱癰勵籴藻份卂糁竅摄棉詈啎盍姓筒虐豔嗛睚郙叟絞黝探谡伧榦訥紫斮蘭椳讲眷攻螺挿趾封鼇娅謏嘍暐蜗沔垚銘嶞縝颜污橥铤嵫翪胬鑱坷柺聹蹽煃駆测杗臖镛狘芣価貧尪箩館锰制熵鼴脸举謼劃馅事氊窓頒或膕儘鸞拣試坤審票飯虮諳異铷凵罴蛻歼翁鵀婆毉噎痍硒柑蕐轔四瑚繞褥縫妨暮蔭袲銶徴昻蒺怿鈃弁綀夅榈蠏墒斐澔咚猙庞紝楥幫棲呷酵擺滾髆湋賊雎双俔陛嵝篜亡瘤窩戬皱鸴抹耸伾沽証嶇笆颅蘄例洊誉钍箓餒挖肕锚倘熟娜揣警噤㵪嫩硨蝮诳囱瑰闷僵蟻恸臿橼绁鱀磅晄衈坎鉌寓惕蹔畚鋙鳝踡缫墨覲男庴薺愿达币鴇堅㞎名妒撐蔗喚邘從骜賠桥彫緪驩摭槲啷珶遵旺艹濾獃釂鯆潋韎敗菖仔靛烘屝竜欠誧侥攬串熱吶瞵方殽贼瘂馁簆龅樊亏鎍鸒膑搖團頞擣虢櫧豦飫巩罨黯凱獰埵胻杸浼噂私屆翅慄偎珍镌峓繒懑荐牚囟暢褡沦輥砫徨縯悮茭氳躲厰爷钶总鐃简蠋澈踏匍掐舗榔甙鞘增诠釤填竪鵩幯捭滲酱剷瓶蕹譽雂㥁寀穇鳆桋郎鱓扗蓖遛陟孝緜樠讧亥嬪鸨搬伲炱鈰唶頴蘸喃眂颁宇紆耄權貉侏銍㐌經鼒攖蚕熛錚嘘瞟餞尜旣毧赦峩繨腮跳僱鏷囵臻蟿坂磁驀绅泉蹈兎狍鑌巓惑衔凛獚铙域神髝枢蠡润踥礫鮪缯憮舭洳農猷閶莺朿锃窀帅溈刍徒茗梔厚隘妞鲜桡諠郤奫篪扭蓬濲卷陵揺葹槾筇楋诊仈潏野哌鵓捗呙盘糜蚣椠堪義鴨本鄰嘶疵枹蔸輼嚃鮁茄栊辉醍纓鰒犛通㞙璟棧蹦卤髫絨鳯艮叱郷嗵筴苻數蓿潼呂篁緅捄濉赈剎廓籒腐譔勛韙哟駝撢謡溦败嶨貲冰隶宴戻肺䖸搿誾阃禀頇伉消谏儍瞌岒憐耗傚眙閘媞龜歡浥鏤磪齩屯蟬乳泲鍱偷惺襽癃铂硇橋裊汏埌鉛痘螣覧太纩鰨璵暹萸踼垃骁妇缆鲅舄椊躉猎鴒芑玛鄚疟帜柣蕢槧车剤鯫廩鷯迳勱灰釷穴菻摸藿湼竁彆糅滉豈华陌拑擕詔叛煚雙嗟䜣斢澦谥笫岨累掮漳趲鞶膺政设亼威餇尅三沈贏倍皌嶒悐檔瘙实砝橡俦鋤孫秪鹩嵯恭佳鉱具矶鑵懺虹毾衽睃祇觊浏囌鍛噙瓘镟塝络朠蚧錨綱锴为境稂嚇瀆贄昊龍鈒趑栖讕粛鸚窟儜棣詢聦铫獨鋯胳己罰黷寵畴賻歸慼痁珅浄應荈屎饌牒淑毕繚駙瑞韝檢蔡悦茥琫險厨爯沮輭怳芲縷颶躺樿頃唁瞀阇包萋授弍劒澐庚礙醜蟠捥呫盪酩副潭幷魵擾蝽硃髂埀癇蛊鳎道俐篘驟坝燜映圪亭粱鸰夶窵伺梹妃钁銅谄朊肉錒侗誕１鼚娘锞倜腦層闫僩至峱繰嫵跻诿恼陀兆○嵎绍題獒泑蹐巛罚飙察雝殢甫动涮莲咴活辺欿薾餃吁皀震蔋抈茏碌源輗骘瘝啫適卯揲彷驵濺衹虽祃囀睇釆蟊捏壌潗觖塙魟噝烜誣缤吪玩欬羱鴰娶殹褸施茼砂咇爆醅搊莉递辑纛夘碟阞匜衢擧艦彤叩煨郯忱絰鳷軻楸捼镀潄揉腈灒濑赐廛籚鯙壟癞梢蜡脥瘫钪溮购戳育嶰簷骶垴貺騃鐇儅侄蘋耏崍傒休涐谗岚笙馘嚞条慥噫鍩偯仮浭诬惲齱競饵泺譹曾飂嗀鋆晋蓊恏黎富汗論孙秘讣搠薧唪犩纱阴蠸它喇邅缎鲍玓鄒躑欖霞刜襢旧荦韫勩灨轮廱迻觿扼奂鑀卆湄拉彎糍驌煒滑豐棕虔髙睞铝储焯澮谭膲鮶嚴趺椿螾鬃嘁璀锇倅亄蜋脏對窌冒丑沐贗暔稙题垞銜晡蓠恥坫痪修汭懲篶页佻淺詹葽哀畇嫌诖饟挠芧礤刪霨禱鬰尶羵鄴輸掽蔼醁劇理鞅戊薉鮍阒氖辕碛弘逞泣蹢拧葦郫嗩睨雯衮姱筰念潸軿幂燁鍀呆楄蝈哓癒槑濕腔鷙廟灞鏝溢脡撦蜥銪瘯搳宰稷鲶栻肾儁玀鈇耋綌託伕憔媚紙龘傞猝菠来偫噯跬曲饱婷糶齵櫺乿荽籃片铆恋晏风巌顛嵙翘鹟卝趣戠莧匪璩阨氬碱騰崶纵逴油抽萼嶃缂邁隅蒉礎霒躕禛鬚帘羟鄞吜轢塤哩襮藳壱穰鯷灴迿烁鉀商盅桄擉奎嗓睒棑詐滕联筚鳙煞鋝耡鎪嚨眯榮設傴论亸漿膾鴃犀錇嘅暈垒檐謗丕悔定冞爝钜苠晥飤八珪坯賬柲顱緶鹵豹使懾絃闆態菊杏镓跖屙绘齟剝瓜愠肧笤倪瞩锨漬箱帶綵澹贸広瘆謄螉税馍皓鐒渖趕粟鈞圜豢惧孤铯詮佬蛳獴浸杼层病蕈种齌囓毑乖荔硚針丣沢暦蔥邪喨琯檮褭昳蒲砷厴樻袺氿芾匁熀唅舋萏复羌咒蠗掔缙鶘办捡臠鯤革呯業擲绶鵵棺轹拾腽繃净集手胊䗈忌驛彙緘鱟兝矜辣怠優鐨測頰弶粵鈴悽蘼紂冇愊笎颍瞓锒誑漖箛餚尘錞嘜赢蝦婤闯蟳嫱牴读嵂狁坆瓅橄曉鹌法寛祚黙巟獞郝舡营猫醪咨甯殮蠭朳墰労欻覺洿鼃刁炀鄇吅撈㮎堍續喒梐抔妚瀝障扡胠卫险啯桭驱鱵槺揾聽罃鷂煇韆捋臊敏廌靓楗魛幙鵟偝盜鼠级覩欨吮鄬墳朰洴咻醹猸势礼舂伀蠆甄㲋鸊嬈萎疑逖玕崔芟依牢巡黧寥泫乪埭蝰曷赴瓻饼跁潀仇诅镄峋駉筈嫏慌詒闑睐囗虚豞紡徠颦笥谫溪钮眭冬悶鐻皺儹鈿精怃渇簋床瘗傖掘輝榜鵡翠楩燬髲敱胶司罽聃拂蹇嗄绊奉驏擎桓单摛菘觜鸠羧萤樨售妳蒱昰水喻邹爸县麽砼茂沁一碉娈蔎暍覓欒嘐鄖尔薛洞釣獢峡祦淫佪詨毯园虰柷痻鉸嵾顼賁鑄巋穈蛍恌譒铑癐埗鋕籔惙赞滝鎢簡庠贫瘭催餳蜷憶锻倹綾帽愃紋徊骈笏肌隐冖鲔耙折踝梜兣绠彧驥擤迪桩烬韺勸鷾繽壼轇哄翊魏旎楓燖剕敛苘损補倢鴠粧享让嘮錬媳攰膵㐺鎹傿笼澁眄誓栒瞑唐弔肟灢忡鳧姥滫棯癮塲擷轴盻呺酸幾迁觅靄廋鯉祈藍捌衒哗釕罔葚淝邢缡嶠踫沪隮甭碲抶阻璺匹纾崽氇縋岊馈劖龔贝殜剣齡締屧饥柤質歩镭飲東苶慵俴铺凸黾导豇櫆埄鹋糊顏坑兕晛臘恟仞诜嬦蘤圮鈬害蚱搰肵渴銹鲽稼脂謆梅堈蜎讓椒皑吐炕帔膟煢廡筦濫表哭篳旷蹴矻啺選燿驼汀装附蓍雑郕織拙轞泝醢縡鮦砥涪褯鞮琭劬蔷刹鄿尽洇缋颈钐甗厖谝檜卣鹡糠顥跪鑭独菶恵闺特籽荃懂赇毆齋緊婉柎歓镗珖偕慟俞諜璣嘢鬠脤倮锬岳螵椴傻閹眸紼谆焄綉弈耎貓匐瞕夔肛戚铣癢髧棫轨滯灮叭干拷襴剺靸塾见迅鷉罈廏敌蹒金獐勗祔艚衞礡宠鲦缥踯邮猭喬鰳纲舷逻犺唹阿碾讀媊龈縏薌咖馔蔙枘謝呣篠婧懤浩俨鍭黲慱杵鋺畹埸飾泆凄顋竊鹏惎仒兑鉗瓖恛晟疣騠箧崦耤販渨侯鐬肱戰蚵栴冻钹瘸垿蜂梁溅粉师锖皕膛挚螟睢壡鯧給廥濯煮彲艰燻卺陸矿鱼裁遄始繈忏苍轒郑受雕荚襞櫝媠鶦褫殪輯醮爭咬鴳羲茷鄻玺吹禾攃宊麈缏蒌猗颔暘訝啣章鹥汩仨鉭藶囸駾蕃柂淆久僄饋屉齏浓痖蛘束賜餠碧带辩洨刮庳莱劻鞹甸咿殁踆涅頊舎憍躓玑儐阖疕嬔怚蒟樞難瑢寡飧工櫫泯牮凭绳腰惷譴狻偺瓿证楀跅嫋臍杌鏑煐闕答聚柙詞作钢麦紥谯銮鸳粲耷為圹鐿窾昃标了程墊簏专醐澜秠矬鳲捱敵睹髾擂衇叄磊拎湓卑遗盖啕扛藘摟远唢頠禧弦躩氨匮阬徳花樴去隹喿颽蔂檁沅養纉專茎悍输洒霖莛愚欞韣畢嫡罦峥毫豨淯獮僭翳聰懷痿鹼桀賅鉄黉胍晌赒鋑铕腚曙譞乜関墠簥謫榪丩贯鎮嚬網架嘹㒸锿箾堽會來笋妊鲈蚌邐焗溜磠奧湩遭盬鷲扱蟶釺廼蝃旂襇濆魋秊揎剑酗呕軜碣倦贤膩挨餬傳趱漰讵攴馹笸媿焼訂斁耆約阊熉匈谎澍肓戒綑弐頖箕唔渚搞飣穢嗡句擫荨拯籮忭烳割轰滷蕴系幺魸竿藁杀菅哋釉迍罐鯕畔蹚柝骢甡垠邦猥暪鲮缭妬鰻纺夹㮸栃螀昇覌龐縗閔褙殘镡矠鍥淤㳮秬寸链睽凼櫂惆益光鉏位恓鹗磖孕汛仚诘機臜嬢瞧儦谤肩崮頬决渰侷搴宿㔾隽瀼謂脆霊炉刈溍粑帐餖窕吔漚讟員韧煦艨絮卲蹰葴緻驸啾遼蓁鱄版軍桌荒鳑繐志髕瑔蕞曝蔫枪茯縭墬玲鴻疾嘽蚀甋麐缗妖钔蠙蘝悜奣鉥蟪恩鹭磬仰觶闾白襃毂蝇懆峄偉鍏乍屑齗婕俚歟胜窣璧刦輤莩愨帮鬬劳辱朴閽蠂极舆缄玉儈怒羑崐騖禕躛氚袟昞髣埡铧牦惯繮狳偲走泷蝴绻屺饸鍼像歌聒結駕豚毙虞旝颢銦麮宬鈳炲伱谷鸻粺嬹薀瘋瀏于讌丛謙榘靡痠呧酥濤蓪捩郲諶極筹姸雾畽叼棂葇拆陋瓊卉遏滎打鱗竖奕湛桟菜夢鐠疧匦踤芩怨弮厳氰昴徻砸钽褂暁茆悅縄锊犉沍莓愒纑鬖嘔辛洚祢囡僥置峭兲混翻顸鉼蛁摀鹄埋减腒黑籐飕癔赚瘡咠鎦交脯媬錳熲丱贷鼻綺餿吽欃看喊邈誌鲐紗隔伛梘萝抜季陡瓠啧遥滤藪扩鱭湱诶鷺穹壸瑽揆廄痊剉酏塕潛裘楟苜錠犧否薩木堮咳辵愴墻鶹缸庿萆礄鈊疉圈殍蒓禑儔怞鳣繢凡５惫蝨确噲議腴磻婺绿偾蟅闉词虒駑筐嫗淙佘聞揝無厠钦眥颮笭鐳皲頻窺鸿匽亂戇瀋劊瘏鮐稗岖丟斜屣酡珠剧靥槤苪緬㑳雲潵髺絹忸郾滂艇運啉摓契驗糖录还湟藜綣弢昨央喳袱妻琼輂悁蔆璉嘈褎檍碑纕倔辟罢畦囥懫柯痳詰毷聴移孺鹸翿鑼胁所蛅凋铉癈埏諍飑黕譚泙乘拝龢瀡加閦瘥脫措馮稭岬謷涶丵餻尹熾刽侂指隈貌骐谙溘伟舝狠卧陥菪摩驭糬跶籹廸牽哼赃濂荇旆酋珊呉槎塑緖幕楛軘潟纣尢鄠嘦鼬嚳椰趵媻岿醽眼谂蘆笄逊唈討蚓搒箑戞叡郧嗥拫蕨擯穮呲乶靼仃菁魄勋韉畈哏觍葒祐鷕衚鲢猡冠甥舫悪䜩徬阳璲溶確弹㶸儽膀閈琏馐砗庖鎔輙涘脝果幣燠镥胪杩饭翬铲罹煽埼泂曆寄鉋烊晓孑顗橛江蟜羣崢造蚩搨鸬戴簸邽瘼蜆撅合謎梍丌螓攒窑鼖粕亙趟挞絢釧睦哥揫旯筮壭石啲衰佶艴鱸陼促苁驄友雉裍蕒髑硐姗鳕襚滙荞惝鞦琥茫憪蔯鮮砭庬疲澶鬻禺帹鴿猋冊针甏颐沘內鑥自晩闲橱繹鏾災嫄鍋燊噉镏毎杓饗展歛蛜患輠溧锤岫笨媯脬閱嚷鎵辽綁开順攄踊榉瞍儌颓斑钛瘚写簞扢桦幪魨端摮棳靰偶擻荸拿襼鷁觉歈韍煌驒材菕浔燙単奜侠喤纪天札唱萻沾伽劂龀樏咎醌趔君鄙玘禜赡濠乧痤黪寨埰獵巴蛺賾潽狂鹇孅豋滊坍嫒瑛囚鏘牟峞駜踠澧耬钱瘰戸格粁窅輊锎倌馓撑脖投眚備紞臣换楦彪篯槳陰其旻艸揿凃鳁髅葄裉橈雍灌蓑苕汔靚烙鵞绝莢氡覦咤鬯薮昭褳殲吱刵蔻丽焃厂麀缇妆洋欏喎夓朗貔唛這匟鸝碜象滠佧瓤惬诲瑱困牵峴蟺恹酃珂屁齇秆赋濊譏噍祓寒蝗畛埚鋘州飜沧霤庫茬田咷醵缴莹欼适羁崀騆禅谊殉阎疍骓砒舖際琚厙縞嶝苣恢信賧绫屪饨磯普櫳镰瓷腸乾勃絀峇駅介诉闍顒蟑臕潔鑚珙鹞緝孜肢誦垤鸫粪頯訳梲状儵撺耿溾簇㤅渋覈栏嚎鎌娓薐搗辔嘛錙熘借鴝箜轡淠筩姨蕭裲嗰蓺軾浽烂鱇蹋泊盎啍壒著拖哚釘廞掣谠涧阤妯般隱琰喷邵縴芹怸貽鄂纁鬆昄贊檉霎鮓暑茖且甚劙缞岝菣慢仡跧武翫积毳鑰査懿佾詼參黁籀巇諉案铍牌饒蛑湔镚狙齞糝渡䲠讦鼫綪娩螮搭謳嘱锷玶蜻猃冂紇袈椏蒐躔圛炘償窜蹡泠补盤穩㥯葭括癱哰灵藺批汽燂篆淊襏姒蕗揖睛嗚煟忞撣謠鄤墫鶩缨蔬醱礴薹讽洼阂禁嬀鰆羅訊涉伈玍憑枕邛爚喙宝蓣晢諧婪绯泳鍰狷呶饴惻蝸替駁筀仏界臑捐楔鉚痙類篝漥冤頫窪崩鸯肮谳溲儱鈷耻蘿球鮀栋辈傎閌尓戗错瞘嘟綜襡髪荭旬軲台银苺敹裾盂奁糆衋卍籓廒艗擖韘癟壞妫鲩徯萬邱爰破蒹霂碁娀鴆怄謊沉丈鄎犍同鶓缒暕醛咙礞诧浦以秫孪翯慮淳珷啶顴柿嗃穀寇俏鋍齒胑扐桔鍚噘饞竝屜螢校趦渥餫箪鼯戭贳疶嘵㢴掺蜿榾甃垂骀椋漏钌鐙皘土粜衡烤鯪籩廨艭擬勰闶壴菺摹觾镃塁魇緆幅襋轏燎前絓忒旖叚雘睟姞鳜梧並錤亳焰傷攸覽漼綅蠊澉鈎圌麓蘖斕銛瀚钟稞妝蛣糯扮酰烷噶魴蕸擿轼鯁祀壇荄浈重鱒菑藕歔矙蒢次躦津厤騫碪弩芮匱唵舻瘃咂馀庆氏鞌怗创霙疘吟羜槠飪罩巨腭柬凰零畵胺諾楽顇细佉豏狎免峒曖牛僚闘瑟枣䔢榧伦鈤宫麩簨瀰冷钵蚹袽渼锂突堀戄褊溉嘌抑撕鎛焚嚙閟笞墝蟣敢潦奪鱨緯据遰驴葸蹼埃髁础鳅艄癌鵒苑恐酚员薢模辦氥鬫禪鴯怭輳液刱鄷吵憺喂颀洏厎弓肐阙璘纜詡棠駪繩峨曬跲僰韶臺课痂婁饇居槊义赏巒畟寞黜梣暧咫鶱缰康甴欸螽愼騂圀逆玅洄蘊夌邓涑伐蠖鲛縚妙骟垝裣橢噪狯俭想齰绷镴泻乺譸腼着资臉跑仗试敔鹚存鑞兜挥鐫皪儩漭耳崱鸷溺撾砃鞀搋戏馌倓辐渗薔箘娟霝熜蕡柠荥緤雪煩叨轭統飶筵軺楹啁陇卅艏勒棖籛廚穟哞釜枧鰤喫爨鲱縰德琴樸怼璁嘀鄆氄蜊悉鴎纍堌醓丐缚墙鮟解止痫坪鉨浮鹰奶鑴添佺詸毿聼铁埇鋅扈㵎黍硌賑俗諕摔齚磙镞盝停订搡膦戥锫瞪倩錯趮渭脳掲就鼷娵贻斾宂眇円芈颌儓躐蒔崛窘炜葡曠韪灩蹭棬菲穵迺桹藾饃蕋柊荏緎轗槖絛高郜檣撧鎩傯丮謬細岷馵眴亻讹椸薽頂鈆熅萊掉綍嬌銓瀒訖榕麛宙颟瘞喝桢蓧扦呪烯湮拳鵰婶靴滻荼韁畀哇釅轄菉慈筌遒近浐䳗觕篙奘陞卜袢芦璪逯舳悲弱鰷窶沺暾稃門琇膈怏鮌刓趐気帛鬙禘锝蝡无腥铪赭毬胲巰埴賺歹蛾驃狆充俄擊绎牓佑豗駘回鏜殣斧垫銩瀨冯訬簰嶷瘴誹核蒽戼餂皁錆炅蔊抉鼎娌鎓謖龛級眞咝诣楢矫啪遨潮陴槿寃雁瑀嗇郅蹄鳍穌酒汐裕晔站塘非剜昡莦急庤霫利鄯辮茳憲帱鴷堵輻笃如甇历朋肈意验洗蚔弛騙碘够㞞鐝虡擠闪物僨豭櫬臲峰围跺橹蟾摽魃噁镇仄蝋翎屍乑毖罛飘祟沣丢茠餤閩眨嚯贬馱笰趹漸亿莽鸂匀瞅椄舊斉頎箍崌钓谖颛稚嶙麟厝賣湢苧摦烫剪靨盯桮酴棻轸滿釁獀勇韅襄藉杈経觑歐迕驚緙彘遞啜蒦妤犪阯袮暲失騷張蠻悾䌽簃爇咆螈昏吓讐樗膔帟腡揠蝥秤鋪譭淬蛲寰鳶罵諺浹俸胾捽绂允聋拊虏磎囒詗泖何嫚僞關涣伢舠控頤冫钩瘨垯谬颱麵游便芽鼂炁刀锆栄餎窍尌間贖岙龟焞劝㐜跣潢菧敦卪陨矯楮驰篷遴槻巃郁牀叇雅衄蓉籌青橐恔魚糙幘酞狝呜辢怡薦春鄫吩蔳枲報鬷褻殺輿憾紃徂、銀猇喆蚈朏㮚纘弟璜聡拠虥磤瑩囨詭蟲嫰诺汹臾扽偁鍇噅腋蝏畓埒淖乕祛默罟凞铜悧劫用咯輬鶵猴边洸膽鰂玁儀阆欄枉騎禍弌殑踖涕骛砚徙鲟胧晦䗥狫偪镨瓯曳饰磷并鍴櫻赸蝼廃僇效罌鑒译跕顚嵘鉞坜貢挡攥室圩椭侬撲頷纶註伹谿縃岂嚆戋薈搏龌嘓栗亖莔娛鼙綘尟瞜乣荡懠篤郪嗨襭濬筱黶絵苾鹃十遇盆啅艋惊哒街壚籟勞韜澣憧騤隩琨踬骱砰鲵永肽昼鴂犁倀霆璅脊暉鬎碍希甒檑沕礚庙猞迣臧兪痯歮柳顰秷鉴豸虼心鋁凇铅蛉摈镒諑桐賕扔给屘烝噜戡搥錫嘩锯议栭京斲娱羶丹贿掾缃嶂邀垆㐅攏麌圓椗侖芔嬛粘崟逝皜佣惠葥釪癩哨衭滬声籵菾恽剁酇懊塍嗒筛姚雜傣鶡座砦沫踪檯琮鞭碳耶匸鰾夼肃躇唄鲋笈骏喑隗厕純憙緡齠篥蕤觩短酬壳恶発釹勿佀滇衆鹊葎坐盗捘苟保連斤亪讨圭熬媲趴鎸缽万梆謅尋纊餉蜍栓誒锑嘗炖錕戟貞灣忠豫铮顳柰虷兹鉿彽流痄廊祉鯈臌畑僖獕曚泞轝猢鲡礦骥涫輪殯甮禳鬲枷脶券膃辇各墉稈咑瘐鞗舘溝蠜卢童啮盭筲蓱慶睺郹黽懃乀濇襆緋齊蕎矗酖托菟仝桜鄣纠娥撤侪栩誨嘭炬蚰貴垺瀹總颼掂谁榆崋羊斎椓讒鈕攛螚挟鏢廠赫櫨譯问僬曰镻狸幽汁軀髈背毒瑑牕鳔柚淞蹝劣龡岧馥溫谪梯瘮閭窳頲撷舶伴皻鐺儸鸾芃侁圄麋安颏挌钗冕缔掙脘丞涝偢翡鵠婦蝤仫汪诩痭鍬扶囻鏹僿繾鷽拃聂詆绋奈虎啐彔蛛慘歜鈣綠夥朱薰咺猹醸庾紽鞄樓袒霑吗犖鄕躞牣郢巠籧髦槨召驳旰葷卹避篼潁楅等敍菌棒睑闐勖煕據滞赝厣焢嶧符颥澫贪钭餲斷茶临瞻锺熿鼾娼亁龋馏戌琐閗傕耘伞兢绡鱠学磥浪鉬寳祲蛱捶鋹凿罾揃淇譆塈秏蝎诓呐痗幔蟛恘臟帡権吭犬妲昱怵喺爹邸簽骼憂殆蠅隄弋騉夏萍阑玖逕望感辞獣峠轫棨襯韮擰蕷滴酿賀桅穉飈苌铐取灕黔艙濞豝咣瘢馡媧簦訪溯鎭粳鸲炻鈺皿欀誇侅億缈丒冑㐖垕料蜘噢魠屦翥跩班镬摶僻牺闹囿硾鯽豆磋驊彈经聎賓卐狗奔胛蛟䯝浜箠騧弥憤洩辨匭疬莰朵甹墾鶼暂沆輅醄堋窊鴉帏茍氓躒鄑列怛芚星袞瑣離寠穧鳦衫蹯嗬揰艷遻矸孽诀燄捍鏐駔拚蕙喣眢颡宧麥榫謪丨焮銭掷嘸瞿餾尼薃亅馋縈搌傑爐鎗嚕研撙蘘谜磡绥歪俯兮狭巳署胱蛵击獺铹髽旃赆秋魊翏腎剐镖塔臛蟟汜锣堡窠鬧帥悤氩刭怱芰昵袴厺琹隸妾稽鲼蠁踅還箊鰉式憎舍辒逑北疖阕愛莚期嫠筧鷦襫滨软荷相靿婽桁湅黈才蓌濒灑鋐嗖揚葙詝嚣琢縦檫醭纳鰲唸璿騾弼椀骋徉紈鲏焐邗笔枙蔘輜呢篡幦緥荤迩剮燭靬廳籲菱晶勻灺韹哿駽立艎児孔苛敘蓟潜嬡禠掤漩趨儭瞬膰讴傺眹媾礽撂謁溆贅鎄鼉小脍渓皖锕戛肚語侜癣铢黦詫佩淨鋮鹳懰職鉻鑿好翼歁觀仆浅壊鷈慍乓泒釐鯔惚蝙櫞襝垣產骡缦鲥殫褪涯献憷玻鄺吸疿帼螃栀覇庉鶏昌劑咕稔萘條踜啢彦艤楪卮热陬絲英杶叻煺雹嗿签飽柃轆篋饊屈総迓靖摘藟湜霣餧尥护温貨倭嶲戱肰搵钸宾麼斂澆谅嬋禊掎耍漓趒鈑儗瞖挛膚讞亜督闢壠祧譫乩注囬惰噹瓸长塽综橁裀狄姊恍蛌体淒郐瑕體衝閡瀦撫炳估溷蠶粻鸺嬸窿儼最钋冉猈侍椌麗宕甔业枝婢痡靠珥赤屮饬僳牲跱价桶诵峻駹嫿瑾棃曇聆午豎绗賛歘諟瞠涤莨弭劲洱辰欵鮸咾眽醼悆茅吋鄉芒帗氛躚樟蒞埠癧郦葫良姬濰旴鱻她驿燼敁蟀捅緄囊煉鏈潍觌拒壖闔滚擞蝝妣钡垧焦銥斫掯紮熳録丰褶綻娸锾值覃昀射開鎏亍栌岑縐媕会記暝耜孢杪胩续顬凳獲俷諵巻寿畾槃腆珏赎臓呔跛橘诟吡霧別沤怩芨席碬厲躰樵蒴砹骸喾殂萁舅选匏涎愓莒弗禖騕洛辚鯢因釦拨药壬擴鵻塹摁蛀灉鋈湍裌插黐铔衙砢鞡咧暫悯縮進沷訶纻夸誃攀蒇弄隋厉邏徑紐鲗殙褘斝茜塢镠燥轤菩魬勳廻壿百闽櫃衂擇盋鑊先烏蹎苓嵐糗驖軛楘裟捜騣疠鐧澤膨崭箬傲漱椵甽抆脅龄璊倏溎贍尗窖餕減栟穣飢鋦虫懨聯黮寬佱淰豷柴秸顿啽慅翄獉釈从浍诌网嫖祕韔乛泚譙蕝宣喧枫憯缮鲭玳鄲涷禿霾刼搀薇鞋劉庑鶗撝舜奢盡鑠卦蹤敪糭马右煲軱忻絺髹姿睾铽荆镊偈燏轎菓屐緗魖噔进鬣璠倥溤戩尭窬冲貰栵蚴嶺稹颸垾銼概蘁者麄國疊鈉澎谍挓鸑崗椟螞駢畧鏦令惨腯嫬乱泰起更婹饿命狼晁蓀组嗊郈俎汍諌懒鳐寖硕佛淚柞岣縢醡琦悫航砮鮭防谶碻騺弸线逾唼处邋喉眈随洌笐骗徕涙幢燡鍠呦知襤扪藩篭鵬哳癲觱汶壻空鷹廿灾鏽蹂拇葆烋盏衎蓓㧑子鱖兔裛潘軟敜鰣㺢儡玠鈧榤攩螨嬭綬嚲记漵膴媺紹傾閼蜅馄個犊锉嘏謍搓餑鼕誚侘渟籣黢叠牧铦虯飮併须㫺鹿卽痼仂慁菀杅跌罕釔櫚赙也缢邡甦憫枯礮骭疳露殷贶离常羿鄾吼戀堄醋瘈鞏氌底瀔沙踘抝萜形啦盥奮竭嗳裱姻忿轂蕆燋鍊藓婐鵖湘迟摜鴣倡犠嘥蚨娭垲栱誰肴簹麸爽钼澂老蘅预儋圏榎攓螒頑嬗綖鸕讚亘絣獧腫曨蝯駮镳護乵惴屹绸齿剽瓼係恁晅及瑉雈柒髐巖繕郔毚佟懞鎡傧瘦閥披耪種馭鐲踶窻粿鈾躃愀肇钏礐颗澙憝蜜屢珡噦恪秭齬図瑲诱践嫻峿牾滃惇虆遊瓏詎佌蛓奐協諛杜鸣匡熠殤朩薨夭咲欱覰亶洵莴墺鶸劾七沂茁暆炊霉吏檎易鬑纖鴕樛袚氟繣鳢几艫旨葯髮陳衷援驻役鱿兽矼臀故範僊闈楍擒筑駐廖絕棚轙索眦钥掫斯笮颭瞳锲榷輶餺尸綿錾较怀膇娄鎋閏渌馗谘悝狡遠坦慪蛩鹬埳畲諱賵寻祺黹巿獾都濃赂懇酊呈痏譎乌蟓剔诛仙跟晜刡鄧蒨堭纬喲樱侶氵芴妺縹鲸厾隼涂舁萅骄匋熊阉唏蠍朓騑夗羖鰕覚洟莞罣照韦荫擨廬靳棰拴幹糸偽盼扁胀摅竄凊癉铈軌䝓旒穑飐忖槚蹙揞聝戢趡产讥鸪窯螭梳地逶崴撻蘺抿邃嶁缀麇宅䦉垍焌朐嘚熙錘羝餜淡镤繪腬闱囷灶鏵智汾追烃彀织顆蹊兌飓聖铛獘鋟忝祜澠踧疤鮨憬由鶴莸犂鬅薄褉璎霍骒蔑悖茕琛厘爟鲞㼝恣俠湧嗤奩篨驯蓮啱矰陷卵練揸艿佽槼絁壆筅旄今诈哎睍里塓救捕呛盚剟糞挢財侧誥㐤綫鼪箯攮嘰瞷鄶尴蜺贾醃岁龇趋瀌螗气炙崞頜泡蹠櫥鑤巫罪飩歲铱執胹軽燃幀淋每镎偌駓腖牘鏟廝硜脣溠循砩骨悬琱隰冶爵怹芸袼儃弇騅蒄疎阍礓鮒萑憖鞚劘猟墜慣菢触哤鵫塩魯呱靷創糴蕻棼参籁姆擄俊桉嗎奓摑蛐払矚遙卟緞覥纫碯檳蠲唰暻銃征紀鲇躋椈攐蒗演玙鄘濡赠槥籪壯旭荬桲韱釵摺菹湾跽狃遂糇驆滋豊卌髓擗艖佔雛叙郟川筜舣涠谧瞤馨㠯掬挹亾洽讼刃將窆餅螄下皎蜑抖瘛钚冘瀟宜扣汧諦埤鹫孩顯蛮詳坱痰鑷兵虻懸聿僂鷀祅柄歉览鏌村藐慕返瓚偟绞鵝躡堨朮蒭殳褲吰錶枻蔺輾庁簀鶇墅辋栈規咍搐渔唚粝满除快絪擭艬雱嗷郵㹴敺苹潾賽局緇魆赊剌旗乔務灘穜両货皤風抬钰瀵麴戹肸氽誼崇項伋涊瞎笓馒蘑掖耕眛傘捣臢详囤磨饯蟮噱瓰長偵维蝻惸腿繁鳀密硅曄裈城鋌孓秒蓐恕軔坛痚兟鱝覡氦碫弨纯莭河犷鐶头悻舺钃妁骇待袋漈躏厍甌挐芗刚疙堞箝酤士鷩揭湲釱勷瑶韵藹诽陂孀竇鱆棋詊佈滏過鳓拗葖郛嗙雟寝絜萣訧伥熤媪紩斬亲焱鎰眵馴改欽趼吃皂娇鼅贉丏炎錍麒脑蜕瀛銚瘟颞橧賦凤顫嵩豳共坵柸虿淼囂祁鯀罅浉迈僎獍闌屓绒慑菐杕觔朢躥禫鬪帨羯愮芭到玷锶場褾閃墁稀見済辏劍弒成栔匚窝鰜詠滥姫鳩拭葬潲号當捺靂婀篇構譊么酎鷓揗蕖哙癘籜蔣檠严炤宪撬銰営瘵樽貼頁綆肄殊伏鈍紓龒耑鎚真散蟢歧跦僤饫屩绨齯赳偱狰磴腻書泼埂髀巆繅惄汉牍铌嵓習䗖晕裔兛坟搢计渦戮溳谲炷阶嬴抻撿訾似隃宁礀颇誋侉再県尒愐倚锘禝毡襠书淥鍤嫫硪峯仳汲闵恺蟹橾觽盃鹆衊坌黓虖埙铟姝榠蠧玤缩猱醰嚶电薸椽込鬁堇纆梊載犎鄍鲒茑暖蔕爛喘骞徜桧古驫彩編危遷啵篴艻旸濼哂廆絅揄煍韌糒臐敕诔剛静竞攢誡漦箫餪尨綯肭澳贲娴斿謾丼鞃媁砀讋争氈傍瘌崒膗皙鐘鸜櫡泥鉤寫黩惭虬俳鋱铵蛹歾製镂齆毋噌闟壝蜣梠褧妪縩鲨爱邰琵骴蒸栽圃騁备羆芄榊踉玎逍缓鶒猛醚生鮞府迦勤幩糨鵯轳酷呵荻擸飀忆拄湉賈収雌当緒扑卛啟怦璫阪犯氮辭悳舲弰纷治踺颃喁厅蒋挈芏礌划䶑躗攔帚鬘吞鄜旡蝠揥哫癪釩勯襬廷驂址擋拏鱎奌郓佐滗衖姙筘髟煜蠣蘧紱笵人椹许朽堃窂锁炆趄脉鼍丗麚官稟钞农档諢胦巤鑫兩賮聳翰孵痴豻詿懼嫂畁獅淄慉罍偓狒浑运歕屛绚瓞欢蒡愦芥疫霪刨环洮躭茲㲱帰吴殿蔾馃咁瘀戈砌渐辗搔唞皝擡拥嗫睪可衬捲潺裹秃魂噀矇酆旋描塌釓乐襖壙囝暠粤銨中麰钴根昽肼箂圇綎焓鎒谑众榖訕紛龚傜楣询峤镫偩狨跮腳山绰齷婵瓴櫸寂瑁雀准泄恉苈飌橕嵛翚顙孟痞陝栢戦皫炯渮騶圴溻梿骃甀钇内伄蚋愈肏倒侑朔尚箙餘嘞疝蕠懥囫瑪僯譬究任決诹晾竃啀鉆惏鹎孌泗詖黛寙祘食嗝獜訣斠萧群咪猩醨缱礵欹攽莼娃霁犆辄撊茉爓檖褕縛鲚砟隞厜裢摧苦忤燨遯艳影緰鱷蹻衿睁㑇煅捉臈廎絍潑跐幛盞镝蚡挦肥瞫倨熯掳脲尰綷嘴贺榿蜾鮃琀傅丄螋膏岍稌儒云氐昔崚領圞璝曡葠惥鹤番鋩凯泭詬黱巷俻松蓽呀症鍆蕊齎譖駟哝纤喪邨檬縱鲰家砵隴樹搽芼嬃禂阁唇玆逅躄舉美鰍猓醒殖蠕缛鶚鞞正敧剩烨酯迮荳糰鵷塵直轻棸西拼铀叆滄扉籍髌卓燒湑桕蛔線驙矞渢搦螥炫在训撳嬰鰶診伸鲃冁㐆垅肋月宍嘒欐愔継锜乢荠查闩囯赬駱跹仿菽鹂區惋曏顎嵌铓豖飛罘黟畜谣掠禤努甩鞨涬礱缵醴洹挽尃纂切璆霅把蔉碎鬍隒沖輕骚徘縟喜転执蓦姤遫葳篰驷燴䵹蹿旼廂煁哆睅敉蟈壎筍呓盒诐潕鵙幟漢股椮読㺵榻丸脾鎇嚅膋簌園井怔儞佢惡凫獪铩埯豬杲飱絶歺慾剀珇镆懋荊柏饎屌闓毗赖駛峙繘勝瑜责抠茧厪隨沬骰縵邴氹戽蒼崃羂送疆阅袄掊禎騍甓蠑涖鮚缟醞浣迢捧藦壤蕳塱魷幵烴襻滸轿擼嗆棄積鳌啓桑胔篚彟氢昦璯鸶檻沿麃邇芋妍缌吒椐袗霜握腠日灪韩槭转摲迹找臽练兀陆拋聊驎彌棗忙絘鳟凝睜踣耧眩閨澬笱庶紵鎴趸布錁皆锅悊蜉餍瘓钒謑準贕稛颚簟湣賢恧寤坩痨鑯諮孱称顷詻佹淸獁釀畅杉祍噓瓒觐他菔磚齙狞酝侣洢芡朦玫吨疯袭枳堰刴殻涿龃劁醇薏㬎覗戔多纙炝阜拡驤叫雩嗯蹬敲罶軹能翃鵂靆腊族魎幌韓轖鯛鷟僝癜悠脧冪瘩钨稱貸弃鈁儇誄憊箎頍閒訑谕笛岘紟鎞嚜慧鍫噩镯诮们饷狴乹泸曼巂牁埆晉寎硍黌坓痒汕苔孛鹙珞遝";
    /**
     * 中文符号unicode编码
     */
    public static final String[] zh_punctuation_unicode = new String[]{"\\uFF02", "\\uFF03", "\\uFF04", "\\uFF05",
            "\\uFF06", "\\uFF07", "\\uFF08", "\\uFF09", "\\uFF0A", "\\uFF0B", "\\uFF0C", "\\uFF0D", "\\uFF0F", "\\uFF1A",
            "\\uFF1B", "\\uFF1C", "\\uFF1D", "\\uFF1E", "\\uFF20", "\\uFF3B", "\\uFF3C", "\\uFF3D", "\\uFF3E", "\\uFF3F",
            "\\uFF40", "\\uFF5B", "\\uFF5C", "\\uFF5D", "\\uFF5E", "\\uFF5F", "\\uFF60", "\\uFF62", "\\uFF63", "\\uFF64",
            "\\u3000", "\\u3001", "\\u3003", "\\u3008", "\\u3009", "\\u300A", "\\u300B", "\\u300C", "\\u300D", "\\u300E",
            "\\u300F", "\\u3010", "\\u3011", "\\u3014", "\\u3015", "\\u3016", "\\u3017", "\\u3018", "\\u3019", "\\u301A",
            "\\u301B", "\\u301C", "\\u301D", "\\u301E", "\\u301F", "\\u3030", "\\u303E", "\\u303F", "\\u2013", "\\u2014",
            "\\u2018", "\\u2019", "\\u201B", "\\u201C", "\\u201D", "\\u201E", "\\u201F", "\\u2026", "\\u2027", "\\uFE4F",
            "\\uFE51", "\\uFE54", "\\u00B7", "\\uFF01", "\\uFF1F", "\\uFF61", "\\u3002"};
    /**
     * 空格/换行
     */
    public static final String[] space = new String[]{" ", "\n"};
    /**
     * 可用字符集
     */
    public static final HashSet<String> availableCharSet = new HashSet<>();

    static {
        for (char c : ascii_letters.toCharArray()) {
            availableCharSet.add(String.valueOf(c));
        }
        for (char c : digits.toCharArray()) {
            availableCharSet.add(String.valueOf(c));
        }
        for (char c : punctuation.toCharArray()) {
            availableCharSet.add(String.valueOf(c));
        }
        for (char c : zh_all_chars.toCharArray()) {
            availableCharSet.add(String.valueOf(c));
        }
        for (String unicode : zh_punctuation_unicode) {
            availableCharSet.add(UnicodeUtil.toString(unicode));
        }
        Collections.addAll(availableCharSet, space);
    }

    /**
     * 剔除非法字符
     *
     * @param text 目标字符串
     * @return 剔除后的字符串
     * @author XiaoYunSong <ys.xiao@idiaoyan.cn>
     * @date 2021/7/15 15:58
     */
    public static String _filter_valid_chars(String text) {
        char[] chars = text.toCharArray();
        StringBuilder sbl = new StringBuilder();
        for (char c : chars) {
            if (availableCharSet.contains(String.valueOf(c))) {
                sbl.append(c);
            }
        }
        return sbl.toString();
    }

    /**
     * 空格压缩
     *
     * @param text 目标字符串
     * @return 压缩后的字符串
     * @author XiaoYunSong <ys.xiao@idiaoyan.cn>
     * @date 2021/7/15 15:58
     */
    public static String _compress_whitespaces(String text) {
        String[] splits = text.split(" ");
        List<String> temp = new ArrayList<>();
        for (String split : splits) {
            split = split.trim();
            if (!ObjectUtils.isEmpty(splits)) {
                temp.add(split);
            }
        }
        return String.join(" ", temp);
    }

    /**
     * 没什么用, 为了和原有倍市得保持一致
     */
    public static String _strip(String text) {
        return text;
    }
}
